home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / asm / genlmacb.asm < prev    next >
Assembly Source File  |  1985-05-11  |  19KB  |  566 lines

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                         ;;
  3. ;;                 ASSEMBLE.MAC                     ;;
  4. ;;                                         ;;
  5. ;;          SAMPLE MACRO LIBRARY FOR THE IBM PC MACRO ASSEMBLER         ;;
  6. ;;                                         ;;
  7. ;;                  (C) COPYRIGHT 1983                 ;;
  8. ;;                      BY                     ;;
  9. ;;                   JERRY D. STUCKLE                  ;;
  10. ;;                                         ;;
  11. ;;               RELEASED TO PUBLIC DOMAIN                 ;;
  12. ;;                                         ;;
  13. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  14.  
  15.  
  16.  
  17.  
  18. CLEAR    MACRO    R1,R2,R3,R4,R5,R6,R7,R8
  19. ;;***************************************************************************;;
  20. ;;                                         ;;
  21. ;; MACRO: CLEAR                                  ;;
  22. ;;                                         ;;
  23. ;; DESCRIPTION: CLEAR REGISTERS                          ;;
  24. ;;                                         ;;
  25. ;; PARAMATERS: UP TO 8 REGISTERS TO BE CLEARED                     ;;
  26. ;;                                         ;;
  27. ;; INPUT: N/A                                     ;;
  28. ;;                                         ;;
  29. ;; OUTPUT: REQUESTED REGISTERS SET TO BINARY 0'S                             ;;
  30. ;;                                         ;;
  31. ;; REGISTERS USED: NONE                              ;;
  32. ;;                                         ;;
  33. ;;***************************************************************************;;
  34.     IRP    RX,<R1,R2,R3,R4,R5,R6,R7,R8>    ;REGISTER LIST
  35.     IFNB    <RX>                ;FOR EACH REGISTER IN LIST
  36.     XOR    RX,RX                ;CLEAR THE REGISTER
  37.     ENDIF                    ;END OF IFIDN
  38.     ENDM                    ;END OF IRP
  39.     ENDM                    ;MACRO END
  40. CLS    MACRO
  41.     LOCAL    CLS1,CLSD
  42.  
  43. ;;***************************************************************************;;
  44. ;;                                         ;;
  45. ;; MACRO: CLS                                     ;;
  46. ;;                                         ;;
  47. ;; DESCRIPTION: CLEAR THE DISPLAY SCREEN                     ;;
  48. ;;                                         ;;
  49. ;; PARAMATERS: NONE                                 ;;
  50. ;;                                         ;;
  51. ;; INPUT: NONE                                     ;;
  52. ;;                                         ;;
  53. ;; OUTPUT: NONE                                  ;;
  54. ;;                                         ;;
  55. ;; REGISTERS USED: AX,DX                             ;;
  56. ;;                                         ;;
  57. ;;***************************************************************************;;
  58.     DISPLAY CLSD                ;DISPLAY THE DOS2 STRING
  59.     JMP    SHORT CLS1            ;GO AROUND THE STRING DATA
  60. CLSD    DB    1BH,'[2J$'                      ;DATA FOR DOS CALL
  61. CLS1    LABEL    NEAR
  62.     ENDM
  63. COLOR    MACRO    FOREGROUND,BACKGROUND
  64.     LOCAL    COLD,COL1
  65. ;;***************************************************************************;;
  66. ;;                                         ;;
  67. ;; MACRO: COLOR                                  ;;
  68. ;;                                         ;;
  69. ;; DESCRIPTION: SETS DISPLAY COLOR                         ;;
  70. ;;                                         ;;
  71. ;; PARAMATERS: FOREGROUND COLOR, BACKGROUND COLOR                 ;;
  72. ;;                                         ;;
  73. ;; INPUT: NONE                                     ;;
  74. ;;                                         ;;
  75. ;; OUTPUT: NONE                                  ;;
  76. ;;                                         ;;
  77. ;; REGISTERS USED: AX,DX                             ;;
  78. ;;                                         ;;
  79. ;;***************************************************************************;;
  80.     DISPLAY COLD                ;DISPLAY THE COLOR STRING
  81.     JMP    SHORT COL1            ;GO AROUND THE STRING
  82. COLD    DB    1BH,'['                         ;START OF STRING
  83.     IFIDN    <FOREGROUND>,<NORMAL>        ;IF NORMAL REQUEST
  84.     DB    '0'                             ;NORMAL FOREGROUND
  85.     ELSE
  86.     IFIDN    <FOREGROUND>,<BOLD>        ;IF BOLD REQUEST
  87.     DB    '1'                            ;BOLD FOREGROUND
  88.     ELSE
  89.     IFIDN    <FOREGROUND>,<UNDERSCORE>    ;IF UNDERSCORED
  90.     DB    '4'                             ;UNDERSCORE FOREGROUND
  91.     ELSE
  92.     IFIDN    <FOREGROUND>,<BLINK>        ;IF BLINK REQUEST
  93.     DB    '5'                             ;BLINK FOREGROUND
  94.     ELSE
  95.     IFIDN    <FOREGROUND>,<REVERSE>        ;IF REVERSE REQUEST
  96.     DB    '7'                             ;REVERSE VIDEO
  97.     ELSE
  98.     IFIDN    <FOREGROUND>,<INVISIBLE>    ;IF INVISABLE REQUEST
  99.     DB    '8'                             ;INVISABLE (NO-SHOW)
  100.     ELSE
  101.     IFIDN    <FOREGROUND>,<BLACK>        ;IF BLACK REQUEST
  102.     DB    '30'                            ;BLACK FOREGROUND
  103.     ELSE
  104.     IFIDN    <FOREGROUND>,<RED>        ;IF RED REQUEST
  105.     DB    '31'                            ;RED FOREGROUND
  106.     ELSE
  107.     IFIDN    <FOREGROUND>,<GREEN>        ;IF GREEN REQUEST
  108.     DB    '32'                            ;GREEN FOREGROUND
  109.     ELSE
  110.     IFIDN    <FOREGROUND>,<YELLOW>        ;IF YELLOW REQUEST
  111.     DB    '33'                            ;YELLOW FOREGROUND
  112.     ELSE
  113.     IFIDN    <FOREGROUND>,<BLUE>        ;IF BLUE REQUEST
  114.     DB    '34'                            ;BLUE FOREGROUND
  115.     ELSE
  116.     IFIDN    <FOREGROUND>,<MAGENTA>        ;IF MAGENTA REQUEST
  117.     DB    '35'                            ;MAGENTA FOREGROUND
  118.     ELSE
  119.     IFIDN    <FOREGROUND>,<CYAN>        ;IF CYAN REQUEST
  120.     DB    '36'                            ;CYAN FOREGROUND
  121.     ELSE
  122.     IFIDN    <FOREGROUND>,<WHITE>        ;IF WHITE REQUEST
  123.     DB    '37'                            ;WHITE FOREGROUND
  124.     ENDIF
  125.     ENDIF
  126.     ENDIF
  127.     ENDIF
  128.     ENDIF
  129.     ENDIF
  130.     ENDIF
  131.     ENDIF
  132.     ENDIF
  133.     ENDIF
  134.     ENDIF
  135.     ENDIF
  136.     ENDIF
  137.     ENDIF
  138.     IFNB    <FOREGROUND>            ;IF WE HAVE FOREGROUND...
  139.     IFNB    <BACKGROUND>            ;AND BACKGROUND COLORS
  140.     DB    ';'                             ;PUT IN A SEPERATOR
  141.     ENDIF
  142.     ENDIF
  143.     IFIDN    <BACKGROUND>,<BLACK>        ;IF BLACK REQUEST
  144.     DB    '40'                            ;BLACK BACKGROUND
  145.     ELSE
  146.     IFIDN    <BACKGROUND>,<RED>        ;IF RED REQUEST
  147.     DB    '41'                            ;RED BACKGROUND
  148.     ELSE
  149.     IFIDN    <BACKGROUND>,<GREEN>        ;IF GREEN REQUEST
  150.     DB    '42'                            ;GREEN BACKGROUND
  151.     ELSE
  152.     IFIDN    <BACKGROUND>,<YELLOW>        ;IF YELLOW REQUEST
  153.     DB    '43'                            ;YELLOW BACKGROUND
  154.     ELSE
  155.     IFIDN    <BACKGROUND>,<BLUE>        ;IF BLUE REQUEST
  156.     DB    '44'                            ;BLUE BACKGROUND
  157.     ELSE
  158.     IFIDN    <BACKGROUND>,<MAGENTA>        ;IF MAGENTA REQUEST
  159.     DB    '45'                            ;MAGENTA BACKGROUND
  160.     ELSE
  161.     IFIDN    <BACKGROUND>,<CYAN>        ;IF CYAN REQUEST
  162.     DB    '46'                            ;CYAN BACKGROUND
  163.     ELSE
  164.     IFIDN    <BACKGROUND>,<WHITE>        ;IF WHITE REQUEST
  165.     DB    '47'                            ;WHITE BACKGROUND
  166.     ENDIF
  167.     ENDIF
  168.     ENDIF
  169.     ENDIF
  170.     ENDIF
  171.     ENDIF
  172.     ENDIF
  173.     ENDIF
  174. COL1    LABEL    NEAR                ;SKIP AROUND DATA
  175.     ENDM
  176. CURSOR    MACRO    FUNCTION,AREA
  177. ;;***************************************************************************;;
  178. ;;                                         ;;
  179. ;; MACRO: CURSOR                                 ;;
  180. ;;                                         ;;
  181. ;; DESCRIPTION: SAVE OR SET CURRENT CURSOR TYPE, BLANK CURSOR ON SCREEN      ;;
  182. ;;                                         ;;
  183. ;; PARAMATERS: FUNCTION (SAVE,SET OR ERASE), DATA OR DATA ADDRESS         ;;
  184. ;;                                         ;;
  185. ;; INPUT: CURSOR START AND END LINES (SET ONLY)                  ;;
  186. ;;                                         ;;
  187. ;; OUTPUT: CURSOR START AND END LINES (SAVE ONLY)                 ;;
  188. ;;                                         ;;
  189. ;; REGISTERS USED: AX,CX  (DS USED AND RESTORED)                 ;;
  190. ;;                                         ;;
  191. ;;***************************************************************************;;
  192.     IFIDN    <FUNCTION>,<ERASE>        ;IF CURSOR ERASE REQUESTED
  193.     MOV    AH,1                ;SET CURSOR MODE
  194.     MOV    CX,0F0FH            ;START AND END ON LINE 15
  195.     INT    10H                ;GO DO A VIDEO INTERRUPT
  196.     ELSE
  197.     IFIDN    <FUNCTION>,<SAVE>        ;IF CURSOR SAVE REQUEST
  198.     PUSH    DS                ;SAVE DS
  199.     MOV    AX,40H                ;GET SEGMENT 40H IN AX
  200.     MOV    DS,AX                ;AND PUT IT IN DS
  201.     MOV    CX,DS:60H            ;GET CURRENT CURSOR MODE
  202.     POP    DS                ;RESTORE DS
  203.     MOV    AREA,CX             ;AND MOVE CURSOR MODE TO AREA
  204.     ELSE
  205.     IFIDN    <FUNCTION>,<SET>        ;IF CURSOR SET REQUEST
  206.     MOV    CX,AREA             ;GET CURSOR MODE IN CX
  207.     MOV    AH,1                ;SET CURSOR MODE
  208.     INT    10H                ;GO DO VIDEO INTERRUPT
  209.     ENDIF
  210.     ENDIF
  211.     ENDIF
  212.     ENDM
  213. CVD    MACRO    DEST,ORG
  214.     LOCAL    CVBP,CVDE
  215. ;;***************************************************************************;;
  216. ;;                                         ;;
  217. ;; MACRO: CVD                                     ;;
  218. ;;                                         ;;
  219. ;; DESCRIPTION: CONVERT BINARY NUMBER TO  ASCII DECIMAL NUMBER             ;;
  220. ;;                                         ;;
  221. ;; PARAMATERS: OUTPUT LABEL, INPUT LABEL                     ;;
  222. ;;                                         ;;
  223. ;; INPUT: WORD BINARY NUMBER                             ;;
  224. ;;                                         ;;
  225. ;; OUTPUT: 4 BYTE DECIMAL NUMBER                         ;;
  226. ;;                                         ;;
  227. ;; REGISTERS USED: AX,BX,DX,DI                             ;;
  228. ;;                                         ;;
  229. ;;***************************************************************************;;
  230.     IFDIF    <ORG>,<AX>            ;IF BINARY VALUE NOT IN AX
  231.     MOV    AX,WORD PTR ORG         ;MOVE ORIGIN TO AX
  232.     ENDIF
  233.     LEA    DI,DEST             ;GET ADDRESS OF DESTINATION
  234.     MOV    BL,100D             ;DIVISOR TO BL
  235.     DIV    BL                ;DIVIDE BY 100
  236.     MOV    BH,AH                ;SAVE REMAINDER IN BH
  237.     CALL    CVDP                ;CONVERT HIGHORDER  TO DECIMAL
  238.     MOV    AL,BH                ;GET REMAINDER
  239.     CALL    CVDP                ;CONVERT LOW ORDER TO DECIMAL
  240.     JMP    SHORT CVDE            ;JUMP AROUND PROC
  241. CVDP    PROC    NEAR
  242.     AAM                    ;CONVERT TO PACKED DECIMAL
  243.     OR    AX,3030H            ;CONVERT TO ASCII
  244.     MOV    [DI],AH             ;STORE HIGH ORDER BYTE
  245.     INC    DI                ;POINT TO NEXT BYTE
  246.     MOV    [DI],AL             ;STORE LOW ORDER BYTE
  247.     INC    DI                ;POINT